package all.com.jinyongqunxiax.model.mod;

import com.randy.fundation.JxAssert;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import all.com.jinyongqunxiax.BuildConfig;
import androidx.annotation.NonNull;
import jy.game.components.story.JyStory;
import jy.game.tools.BasePojoManager;

public class StoryManager {
    public Map<String, JyStory> map  = new HashMap<>();
    public List<JyStory>        list = new ArrayList<>();
    String xmlPath;

    public StoryManager(@NonNull String xmlPath) {
        this.xmlPath = xmlPath;
    }

    BasePojoManager<JyStory> manager;

    public String load() {
        map.clear();
        list.clear();

        manager = BasePojoManager.build(xmlPath, JyStory.class);
        list = manager.datas;
        if (!manager.success()) {
            return manager.message;
        }
        StringBuilder message = new StringBuilder(getClass().getSimpleName());

        for (JyStory item : list) {
            if (map.containsKey(item.name)) {
                message.append("发现重复:").append(item.name);
                continue;
            }
            map.put(item.name, item);
        }


        return manager.message;
    }
//    public String load() {
//        try {
//            map.clear();
//            list.clear();
//
//            if (false) {
//                Serializer serializer = new Persister();
//
//                File file = new File(xmlPath);
//                Root root = serializer.read(Root.class, file);
//                if (root == null) {
//                    return xmlPath + "bad format";
//                }
//
//                list = root.stories;
//            }
//            XmlUtils.parse(xmlPath, new XmlUtils.ParseCallback() {
//                @Override
//                public void processElement(String elementName, Node element, NamedNodeMap attributes) {
//                    switch (elementName) {
//                        case "story":
//                            Story story = processStory(elementName, element, attributes);
//                            if (story != null) {
//                                list.add(story);
//                            }
//                            break;
//                        default:
//                            Logger.w("not handle element:%s", elementName);
//                            break;
//                    }
//                }
//            });
//
//            if (list == null) {
//                return xmlPath + "bad format";
//            }
//
//            for (Story story : list) {
//                map.put(story.name, story);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//            return e.getMessage();
//        }
//        return "";
//    }
//
//    private Story processStory(String elementName, Node element, NamedNodeMap attributes) {
//        Story story = new Story();
//        story.name = XmlUtils.attr(attributes, "name");
//        if (TextUtils.isEmpty(story.name)) {
//            return null;
//        }
//
//        XmlUtils.processElement(element, new XmlUtils.ParseCallback() {
//            @Override
//            public void processElement(String elementName, Node element, NamedNodeMap attributes) {
//                switch (elementName) {
//                    case "action":
//                        Action action = new Action();
//                        action.type = XmlUtils.attr(attributes, "type");
//                        action.value = XmlUtils.attr(attributes, "value");
//                        action.ret = XmlUtils.attr(attributes, "ret");
//                        story.statement.add(action);
//                        break;
//                    case "result":
//                        Result result = new Result();
//                        result.type = XmlUtils.attr(attributes, "type");
//                        result.value = XmlUtils.attr(attributes, "value");
//                        result.ret = XmlUtils.attr(attributes, "ret");
//
//                        XmlUtils.processElement(element, new XmlUtils.ParseCallback() {
//                            @Override
//                            public void processElement(String elementName, Node element, NamedNodeMap attributes) {
//                                switch (elementName) {
//                                    case "condition":
//                                        JyCondition condition = new JyCondition();
//                                        condition.value = XmlUtils.attr(attributes, "value");
//                                        condition.type = XmlUtils.attr(attributes, "type");
//                                        result.conditions.add(condition);
//                                        break;
//                                    default:
//                                        Logger.w("not handle element:%s", elementName);
//                                        break;
//                                }
//                            }
//                        });
//
//                        story.statement.add(result);
//                        break;
//                    default:
//                        Logger.w("not handle element:%s", elementName);
//                        break;
//                }
//            }
//        });
//
//        return story;
//    }
//
//    static public class Root {
//        @ElementList(inline = true, required = false) List<Story> stories;
//    }
//
//
//    @ wx.xml.simpleframework.xml.Root(name = "story")
//    static public class Story {
//        public @Attribute                  String           name      = "";
//        public @ElementList(inline = true) List<BaseAction> statement = new ArrayList<>();
//        // public @ElementList(inline = true, required = false) List<Action> actions;
//        // public @ElementList(inline = true, required = false) List<Result> results;
//    }
//
//    static public class BaseAction {
//
//    }
//
//    @ wx.xml.simpleframework.xml.Root(name = "action")
//    static public class Action extends BaseAction {
//        public @Attribute                   String type;
//        public @Attribute                   String value;
//        public @Attribute(required = false) String ret; // 老胡锻造
//
//    }
//
//    @ wx.xml.simpleframework.xml.Root(name = "result")
//    static public class Result extends BaseAction {
//        public @Attribute                                    String          ret        = "";
//        public @Attribute                                    String          type       = "";
//        public @Attribute                                    String          value      = "";
//        public @ElementList(inline = true, required = false) List<JyCondition> conditions = new ArrayList<>();
//    }
//
//    @ wx.xml.simpleframework.xml.Root(name = "condition")
//    static public class JyCondition {
//        public @Attribute                   String type  = "";
//        public @Attribute(required = false) String value = ""; // type="大地图"
//    }
}
